﻿using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;

using SchoolProject2012.Domain;
using SchoolProject2012.Services;
using SchoolProject2012.Areas.ChargeDePlacement.Controllers;
using Moq;
using System.Web.Mvc;


namespace SchoolProject2012.Tests.Controllers.ChargeDePlacement
{
    [TestClass]
    public class EntrepriseControllerTest
    {
        private string langue = "fr-FR";

        [TestMethod]
        public void ATE_ReturnGoodListTest()
        {
            //******************** Arrange *********************

            //On crée une liste d'entreprise
            var entreprises = new List<Entreprise>();
            entreprises.Add(new Entreprise());
            entreprises.Add(new Entreprise());

            //on crée une simulation du model
            var repository = new Mock<IModelService>();
            //on indique que la méthode getListOfEntreprise() doit retourner la liste crée précédemment
            repository.Setup(r => r.getListOfEntreprise()).Returns(entreprises);
            //on crée le contrôleur
            EntrepriseController controller = new EntrepriseController(repository.Object);


            //*******************  ACT   **********************

            //on execute l'action ATE
            var result = controller.ATE(langue) as ViewResult;
            //on récupére les donnée qu'à reçu la vue
            var model = result.ViewData.Model as IList<Entreprise>;
         
            //****************** ASSERT ************************

            //on regarde s'il y a le même nombre de données.
            Assert.AreEqual(2, model.Count, "Il n'y a pas le même nombre d'entreprise");

        }


        [TestMethod]
        public void AE_AddEntrepriseTest()
        {
            //on crée une liste
            var entreprises = new List<Entreprise>();
            //on crée une entreprise qu'on ajoutera plus tard
            var entrepriseToAdd = new Entreprise();
            entrepriseToAdd.libelle = "test";

            //on crée une simulation du modèle
            var repo = new Mock<IModelService>();
            //ici on implémente la méthode addEntreprise
            repo.Setup((model => model.addEntreprise(It.IsAny<Entreprise>())))
                .Callback<Entreprise>(ent =>
                {
                    entreprises.Add(ent);
                })
                .Returns(true);

            EntrepriseController controller = new EntrepriseController(repo.Object);

            var result = controller.NE(langue, entrepriseToAdd);

            Assert.AreEqual(1, entreprises.Count);

        }

        [TestMethod]
        public void suppEntrepriseTest()
        {
            Assert.AreEqual(1, 1);
        }
    
    
    }
}
